import java.math.BigInteger;

//给数组进行加1操作  leetcode——66
public class PlusOne {
    public int[] plusOne(int[] digits) {
        BigInteger sum = digitsToBigInteger(digits); // 将数组转换为 BigInteger
        sum = sum.add(BigInteger.ONE); // 加一操作

        // 将加一后的 BigInteger 转换为字符串
        String nums = sum.toString();
        int[] result = new int[nums.length()];
        for (int i = 0; i < nums.length(); i++) {
            result[i] = nums.charAt(i) - '0'; // 将字符转换为整数
        }
        return result;
    }
    // 辅助方法，将 int 数组转换为 BigInteger
    private BigInteger digitsToBigInteger(int[] digits) {
        StringBuilder sb = new StringBuilder();
        for (int digit : digits) {
            sb.append(digit);
        }
        return new BigInteger(sb.toString());
    }
}

//最好的解法
/**
 * 此题主要是判断9这个元素
 * （1）从后往前先找9元素的个数，然后再将从末尾开始第一个不为9的元素，将其加1，将末尾的9全部置0
 * （2）若全为9的情况，则创建一个比digits多一位的数组，最高位为1，其余全为0
 */
class PlusOne1 {
    public int[] plusOne(int[] digits) {
        //从后往前遍历，直到没有9的元素
        int index = digits.length - 1;
        while (index != -1 && digits[index] == 9) {
            index--;
        }
        //全为9的情况
        if (index == -1) {
            //创建一个比digits数组多一位的数组
            int[] result = new int[digits.length + 1];
            result[0] = 1;
            for (int i = 1; i < result.length; i++) {
                result[i] = 0;
            }
            return result;
        }
        //末尾从第一个不为9的元素加1
        digits[index]++;
        //将末尾其余的9全部置0
        for (int i = index+1; i < digits.length; i++) {
            digits[i] = 0;
        }
        return digits;
    }
}
